# obj.__dict__：对象的属性字典
# obj.__class__：对象所属的类
# class.__bases__：类的父类元组
# class.__base__：类的父类
# class.__mro__：类的层次结构
# class._subclasses__()：类的子类列表

class FatherA:
    pass


class FatherB:
    pass


class Son(FatherA,FatherB):
    def __init__(self, name, age):
        self.name = name
        self.age = age

    pass

fatherA = FatherA()
fatherB = FatherB()
son = Son('yinsc', 18)

################################################### obj.__dict__：对象的属性字典
# 输出：对象fatherB的属性字典： {}
print('对象fatherA的属性字典：',fatherA.__dict__)
# 输出：对象fatherB的属性字典： {}
print('对象fatherB的属性字典：',fatherB.__dict__)
# 输出：对象son的属性字典： {'name': 'yinsc', 'age': 18}
print('对象son的属性字典：',son.__dict__)

print('-' *40)

################################################### obj.__class__：对象所属的类
# 输出：对象fatherA所属的类： <class '__main__.FatherA'>
print('对象fatherA所属的类：',fatherA.__class__)
# 输出：对象fatherB所属的类： <class '__main__.FatherB'>
print('对象fatherB所属的类：',fatherB.__class__)
# 输出：对象son所属的类： <class '__main__.Son'>
print('对象son所属的类：',son.__class__)

print('-' *40)

################################################### class.__bases__：类的父类元组
# 输出：对象fatherA的父类元组： (<class 'object'>,)
print('对象fatherA的父类元组：',FatherA.__bases__)
# 输出：对象fatherB的父类元组： (<class 'object'>,)
print('对象fatherB的父类元组：',FatherB.__bases__)
# 输出：对象son的父类元组： (<class '__main__.FatherA'>, <class '__main__.FatherB'>)
print('对象son的父类元组：',Son.__bases__)

print('-' *40)

################################################### class.__bases__：类的父类
# 输出：A类的父类： <class 'object'>
print('A类的父类：',FatherA.__base__)
# 输出：B类的父类： <class 'object'>
print('B类的父类：',FatherB.__base__)
# 输出：对象son的父类元组： Son类的父类： <class '__main__.FatherA'>
print('Son类的父类：',Son.__base__)

print('-' *40)

################################################### class.__mro__：类的层次结构
# 输出：A类的层次结构： (<class '__main__.FatherA'>, <class 'object'>)
print('A类的层次结构：',FatherA.__mro__)
# 输出：B类的层次结构： (<class '__main__.FatherB'>, <class 'object'>)
print('B类的层次结构：',FatherB.__mro__)
# 输出：对象son的父类元组： Son类的层次结构： (<class '__main__.Son'>, <class '__main__.FatherA'>, <class '__main__.FatherB'>, <class 'object'>)
print('Son类的层次结构：',Son.__mro__)

print('-' *40)

################################################### class._subclasses__()：类的子类列表
# 输出：A类的子类列表： [<class '__main__.Son'>]
print('A类的子类列表：',FatherA.__subclasses__())
# 输出：B类的子类列表： [<class '__main__.Son'>]
print('B类的子类列表：',FatherB.__subclasses__())
# 输出：Son类的子类列表： []
print('Son类的子类列表：',Son.__subclasses__())